#pragma once
#include "pde_export.h"
#include <vector>
#include <memory>
#include <string>
#include "glm/vec3.hpp"

namespace  pde
{

	class pde_export RbeMKM {
	public:
		RbeMKM();
		~RbeMKM();
		static std::shared_ptr<RbeMKM> New();
		std::string to_bson();
		bool from_bson(const std::string& bson_str);

		SetGetMacro(double, energy);
		SetGetMacro(std::vector<glm::ivec3>, points);
		SetGetMacro(std::vector<double>, v1);
		SetGetMacro(std::vector<double>, v2);
		SetGetMacro(std::vector<double>, v3);

	};
	class pde_export RbeModel {
	public:
		RbeModel();
		~RbeModel();
		static std::shared_ptr<RbeModel> New();

		std::string to_bson();
		bool from_bson(const std::string& bson_str);

		bool to_file(const std::string& fn);
		bool from_file(const std::string& fn);

		SetGetMacro(std::string, name);
		SetGetMacro(std::vector<std::string>, tissu_names);
		SetGetMacro(std::vector<double>, tissu_abr);//tissue alpha beta ratio
		SetGetMacro(std::vector<std::shared_ptr<RbeMKM>>, mkm_list);
	};
}
